package leetcode100;

/**
 * @author shkstart
 * 给你一个字符串 s，找到 s 中最长的回文子串。
 * @create 2022-11-15-20:27
 */
public class Num5 {
    public String longestPalindrome(String s) {
        if(s.length()==0||s==null){
            return "";
        }
        int maxlength =0;
        int length =1;
        int left =0;
        int right =0;
        int maxStart =0;
        for(int i=0;i<s.length();i++){
            left = i-1;
            right =i+1;
            //遇到左边字母和当前字母相同的情况，向左扩散
            while(left>=0 && s.charAt(i)==s.charAt(left)){
                left--;
                length ++;
            }
            //遇到右边字母和当前字母相同的情况，向右扩散
            while(right<s.length() && s.charAt(i)==s.charAt(right)){
                right++;
                length++;
            }
            //左边字母和右边字母相同，同时向两边扩散
            while(left>=0 &&right<s.length() &&s.charAt(left)==s.charAt(right)){
                left--;
                right++;
                length +=2;
            }
            if(length>maxlength){
                maxlength =length;//更新最大长度
                maxStart =left;//把最长回文串的头的下标标记
            }
            length =1;//循环一次重置串的长度
        }
        String str = s.substring(maxStart+1,maxStart+maxlength+1);
        return str;
    }
}
